//package com.zwd.cases.utils;
//
//import cn.hutool.core.date.DateTime;
//import com.aliyun.oss.OSSClient;
//import com.aliyun.oss.model.OSSObject;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.net.URLEncoder;
//import java.util.UUID;
//
///**
// * @Description OSS文件上传下载等相关操作工具类
// * @Author zhengwd
// * @Date 2022/7/21 11:09
// **/
//public class OssUtil {
//
//    public static void main(String[] args) throws FileNotFoundException {
//        /*
//        // test-001 从本地上传文件到OSS
//        String contextPath = getContextPath();
//        contextPath = contextPath.replace("target/test-classes/", "");
//        String str = contextPath + "src/test/java/com/zwd/cases/demo/file/test/sourceFileName.pdf";
//        System.out.println(str);
//        InputStream inputStream = new FileInputStream(new File(str));
//        String uploadFileName = "sourceFileName.pdf";
//        // TODO 要修改成你自己的信息
//        String endpoint = "你的endpoint";
//        String accessKeyId = "你的accessKeyId";
//        String accessKeySecret = "你的accessKeySecret";
//        String bucketName = "你的bucketName";
//        String uploadOssFileUrl = OssUtil.uploadFileOSS(uploadFileName, inputStream, endpoint, accessKeyId, accessKeySecret, bucketName);
//        System.out.println(uploadOssFileUrl);
//        */
//
//        /*// test-002 从OSS获取文件流直接上传到本地
//        // TODO 要修改成你自己的信息
//        String endpoint = "你的endpoint";
//        String accessKeyId = "你的accessKeyId";
//        String accessKeySecret = "你的accessKeySecret";
//        String bucketName = "你的bucketName";
//
//        String contextPath = getContextPath();
//        contextPath = contextPath.replace("target/test-classes/", "");
//        String fileOutPath = contextPath + "src/test/java/com/zwd/cases/demo/file/test/sourceFileNameDown.pdf";
//        // 文件存储的，bucketName之后的OSS的存储路径，需要改成你自己的
//        String filePath = "你的文件存储路径";
//        OssUtil.downLoadFileFromOSS(filePath, fileOutPath, endpoint, accessKeyId, accessKeySecret, bucketName);*/
//    }
//
//    /**
//     * 上传文件到OSS
//     * @param fileName
//     * @param inputStream
//     * @return
//     */
//    public static String uploadFileOSS(String fileName, InputStream inputStream,
//                                       String endpoint, String accessKeyId, String accessKeySecret, String bucketName) {
//        // 创建OSSClient实例。
//        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//        // 优化文件名（11112222+01.jpg）
//        fileName = UUID.randomUUID().toString()+fileName;
//        //优化文件存储路径（/2021/03/09/uuid+01.jpg）
//        String path = new DateTime().toString("yyyy/MM/dd");
//        fileName = path+"/"+fileName;
//        ossClient.putObject(bucketName, fileName, inputStream);
//        // 关闭OSSClient。
//        ossClient.shutdown();
//        String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
//        return url;
//    }
//
//    /**
//     * 文件从oss下载
//     * @param request
//     * @param response
//     * @param filePath
//     * @param fileName
//     * @param endpoint
//     * @param accessKeyId
//     * @param accessKeySecret
//     * @param bucketName
//     */
//    public static void downLoadFileFromOSS(HttpServletRequest request, HttpServletResponse response,
//                                    String filePath, String fileName,
//                                    String endpoint, String accessKeyId, String accessKeySecret, String bucketName){
//        try {
//            OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//            // 获取fileid对应的阿里云上的文件对象
//            OSSObject ossObject = ossClient.getObject(bucketName, filePath);
//            // 已缓冲的方式从字符输入流中读取文本，缓冲各个字符，从而提供字符、数组和行的高效读取
//            InputStream inputStream = ossObject.getObjectContent();
//            // 缓冲文件输出流
//            BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
//            // 如果没有扩展名则填默认值application/octet-stream
//            response.setContentType(getContentType(fileName));
//            // 这里设置一下让浏览器弹出下载提示框，而不是直接在浏览器中打开
//            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
//            byte[] car = new byte[1024];
//            int L;
//            while ((L = inputStream.read(car)) != -1) {
//                if (car.length!=0) {
//                    outputStream.write(car, 0,L);
//                }
//            }
//            if (outputStream!=null) {
//                outputStream.flush();
//                outputStream.close();
//            }
//            if (ossClient !=null){
//                ossClient.shutdown();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    public static void downLoadFileFromOSS(String filePath, String fileOutPath,
//                                    String endpoint, String accessKeyId, String accessKeySecret, String bucketName){
//        try {
//            OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//            // 获取fileid对应的阿里云上的文件对象
//            OSSObject ossObject = ossClient.getObject(bucketName, filePath);
//            // 已缓冲的方式从字符输入流中读取文本，缓冲各个字符，从而提供字符、数组和行的高效读取
//            InputStream inputStream = ossObject.getObjectContent();
//            // 缓冲文件输出流
//            OutputStream stream = new FileOutputStream(new File(fileOutPath));
//            BufferedOutputStream outputStream = new BufferedOutputStream(stream);
//            byte[] car = new byte[1024];
//            int L;
//            while ((L = inputStream.read(car)) != -1) {
//                if (car.length!=0) {
//                    outputStream.write(car, 0,L);
//                }
//            }
//            if (outputStream!=null) {
//                outputStream.flush();
//                outputStream.close();
//            }
//            if (ossClient !=null){
//                ossClient.shutdown();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
//     * @param fileName 文件名
//     * @return 文件的contentType
//     */
//    public static  String getContentType(String fileName){
//        //文件的后缀名
//        String fileExtension = fileName.substring(fileName.lastIndexOf("."));
//        if(".bmp".equalsIgnoreCase(fileExtension)) {
//            return "image/bmp";
//        }
//        if(".gif".equalsIgnoreCase(fileExtension)) {
//            return "image/gif";
//        }
//        if(".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension)  || ".png".equalsIgnoreCase(fileExtension) ) {
//            return "image/jpeg";
//        }
//        if(".html".equalsIgnoreCase(fileExtension)) {
//            return "text/html";
//        }
//        if(".txt".equalsIgnoreCase(fileExtension)) {
//            return "text/plain";
//        }
//        if(".vsd".equalsIgnoreCase(fileExtension)) {
//            return "application/vnd.visio";
//        }
//        if(".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
//            return "application/vnd.ms-powerpoint";
//        }
//        if(".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
//            return "application/msword";
//        }
//        if(".xml".equalsIgnoreCase(fileExtension)) {
//            return "text/xml";
//        }
//        //默认返回类型
//        return "image/jpeg";
//    }
//
//    /**
//     * 获取上下文路径
//     * @return
//     */
//    private static String getContextPath() {
//        return OssUtil.class.getResource("/").getPath();
//    }
//}
